package com.ybox.crawler.process.original.impl;

import com.ybox.common.core.utils.StringUtils;
import com.ybox.crawler.config.CrawlerConfig;
import com.ybox.crawler.domain.core.parse.ParseItem;
import com.ybox.crawler.domain.core.parse.impl.CrawlerParseItem;
import com.ybox.crawler.domain.enums.CrawlerEnum;
import com.ybox.crawler.process.entity.ProcessFlowData;
import com.ybox.crawler.process.original.AbstractOriginalDataProcess;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @author 16554
 * 从properties文件中读取原始URL，组装要爬取的url
 */
@Component("CsdnOriginalDataProcess")
public class CrawlerOriginalDataProcess extends AbstractOriginalDataProcess {

    /**
     * 从crawler.properties中 组装 crawler.init.url.prefix + crawler.init.url.suffix
     *
     * @param processFlowData
     * @return
     */
    @Override
    public List<ParseItem> parseOriginalRequestData(ProcessFlowData processFlowData) {
        List<ParseItem> parseItemList = null;
        List<String> initCrawlerUrlList = getInitUrlList(processFlowData);
        //  initCrawlerUrlList不为空
        if (initCrawlerUrlList != null && !initCrawlerUrlList.isEmpty()) {
            parseItemList = initCrawlerUrlList.stream().map(url -> {
                CrawlerParseItem parseItem = new CrawlerParseItem();
                // 非自定义爬取时
                if (StringUtils.isEmpty(processFlowData.getCustomUrl())) {
                    url = url + "?rnd=" + System.currentTimeMillis();
                    parseItem.setDocumentType(CrawlerEnum.DocumentType.INIT.name());
                } else {
                    // 自定义爬取时
                    parseItem.setDocumentType(CrawlerEnum.DocumentType.PAGE.name());
                }
                parseItem.setUrl(url);
                parseItem.setHandelType(processFlowData.getHandelType().name());
                return parseItem;
            }).collect(Collectors.toList());
        }
        return parseItemList;
    }

    @Override
    public int getPriority() {
        return 10;
    }
}
